<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        function Person(){
            this.name = 'Jack';
            this.age = 18;
            this.gender = '男';
        }

        Person.prototype.sayHi = function(){
            console.log('welcome to qfedu');
        }


        const p = new Person();
        // 对象p的__proto__

        // p是对象  任何对象天生自带一个属性 __proto__
        // p 是从 Person 构造函数中生出来的 
        //p的构造函数是Person 
        // 对象的__proto__ 指向所属构造函数的prototype 
        // 所以结果 Person.prototype

        // console.log(p.__proto__ === Person.prototype);


        // 问题2 Person 的 __proto__ 是谁 ?
        // Person 是构造函数 本质是函数 
        // 只要是函数 构造函数就是Function 
        // Person的构造函数 就是Function 

        // Person 就是 Function 的一个对象 
        // console.log(Person.__proto__ === Function.prototype);

        // 问题3 Person.prototype 的 __proto__ 是谁 ?

        // 任何函数的属性 prototype 一定是对象数据结构 
        // 任何对象的构造函数 是 Object 
        // 所以 Person.prototype 构造函数是 Object 
        // Person.prototype 是 Object的一个对象 

        // 任何对象天生自带一个属性 __proto__ 指向所属构造函数的prototype
        // console.log(Person.prototype.__proto__  === Object.prototype);

        //Function 的 __proto__ 是谁 ? 
        // Function是内置构造函数   本质是函数  
        // 只要是函数 构造函数 是Function  

        // Function 的 构造函数 是 Function  
        // console.log(Function.__proto__  === Function.prototype);

        // Function.prototype 的 __proto__ 是谁 ?

        // 任何函数的prototype 一定是个对象数据结构 
        // 任何对象 的构造函数是 Object 
        // Function.prototype  是 Object 的对象 
        // 任何对象的__proto__ 指向所述构造函数的prototype
        // console.log(Function.prototype.__proto__ === Object.prototype);



        // Object 的 __proto__ 是谁 ?

        // Object  是内置构造函数 本质是函数  

        // 任何函数的 构造函数 是 Function
        // Object  的构造函数 是  Function

        // console.log(Object.__proto__  === Function.prototype);
        

        // Object.prototype 的 __proto__ 是谁 ?
        // Object 是内置構造函數
        // 任何函数的prototype 一定是对象数据结构 
        // Object.prototype  的构造函数是 Object

        // 也就是 到这里 终止  
        // Object.prototype.__proto__ 往上没了 结果就是 null
        // console.log(Object.prototype.__proto__); // null 


        
        var obj = {
            name:'张三'
        }
        //.toString() 方法是写在Object的原型上 
        console.log(obj.toString());
    </script>
</body>
</html>